
// 路由鉴权：鉴权，项目中路由能不能被权限限制
// 某一个路由什么条件下可以访问，什么条件下不能访问

import router from "@/router";
// 引入进度条
import nprogress from 'nprogress';
// 引入进度条样式
import 'nprogress/nprogress.css';

//  引入pinia仓库
import pinia from '@/store';
// 引入用户仓库
import { useUserStore } from "@/store/modules/user"; // Use named import

import setting from '@/setting';

// 进度条加载时的小圆圈干掉
nprogress.configure({ showSpinner: false });

let userStore = useUserStore(pinia)
// 全局守卫：项目当中任意路由切换都会触发的勾子
// 全局前置守卫：在路由跳转之前执行
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${setting.title}-${to.meta.title}`;
  // to：想要访问的路由对象
  // from：当前导航正要离开的路由对象
  // next:路由的放行函数  
  console.log("前置守卫");

  nprogress.start(); // 开启进度条
  let token = userStore.token;
  let username = userStore.username;
  if (to.path === "/login") {
    if (token && typeof token === "string" && token.length > 0) {
      next({ path: "/" }); // Redirect to home if already logged in
    } else {
      next(); // Allow access to login page
    }
  } else {
    if (token && typeof token === "string" && token.length > 0) {
      //   判断用户是否登录
      if (username && typeof username === "string" && username.length > 0) {
        // 如果用户已经登录，则放行
        next();
      } else {
        // 如果用户没有登录，则获取用户信息
        try {
          // 获取用户信息
          await userStore.userInfo();
          next();
        } catch (error) {
          // 如果获取用户信息失败，则跳转到登录页面
          //  获取用户信息失败
          await userStore.userLogout()
          // ElMessage.error(error.message)
          next({ path: "/login", query: { redirect: to.path } });
        }
      }
    } else {
      console.log("token不存在进入登录界面");
      next({ path: "/login", query: { redirect: to.path } });
    }
  }
});

router.afterEach(() => {
  // finish progress bar
  // NProgress.done();
  nprogress.done(); // 结束进度条
});

// 第一个问题:任意路由切换实现进度条业务 --noprogress
// 第二个问题:路由鉴权(路由组件访问权限的设置)
//  全部的路由组件：登录、404、首页、 数据大屏、权限管理（三个子路由）、商品管理（4个子路由）
// 用户登录之后不能再访问登录页面，路由跳转的时候，判断用户是否登录，如果登录了，跳转到首页，如果没有登录，跳转到登录页面